#pragma once
//#include"RBTree.h"
//
//namespace cws
//{
//	template<class K>
//	struct Compare_set 
//	{
//		K operator()(const K& kv) 
//		{
//			return kv;
//		}
//	};
//
//	template<class K>
//	class Set 
//	{
//		typedef K value_type;
//		typedef RBTree<K, value_type, Compare_set<K>> _rb_set;
//	public:
//		
//
//
//
//		bool insert(const value_type& val) 
//		{
//			return _t_set.Insert(val);
//		}
//
//
//	private:
//		_rb_set _t_set;
//	};
//}

#include"RBTree.h"
using namespace cws;

namespace cws_set 
{
	template<class K>
	class SetOfvalue 
	{
	public:
		K operator()(const K& data) 
		{
			return data;
		}
	};


	template<class K>
	class set 
	{
	public:
		typedef K value_type;
		typedef RBTree<value_type, SetOfvalue<K>> _set_rb;
		typedef typename _set_rb::iterator iterator;

		set()
		{}
		//
		pair<iterator, bool> insert(const value_type& val) 
		{
			return _rb_tree.insert(val);
		}

		
		// /////////////////////////
		iterator begin() 
		{
			return _rb_tree.begin();
		}

		iterator end() 
		{
			return _rb_tree.end();
		}

		// ///////////////////////////

		bool empty() 
		{
			return _rb_tree.empty();
		}
		size_t size() 
		{
			return _rb_tree.size();
		}


		void clear() 
		{
			_rb_tree.clear();
		}

	private:
		_set_rb _rb_tree;
	};
}
